#include <stdlib.h>
#include <iostream>
#include <signal.h>
#include <unistd.h>
using namespace std;


int cnt = 0;
void handler(int signo)
{
 //在信号处理函数中，所处理的信号会在执行期间被阻塞，也就是不能被递归执行本信号。但是其他信号还是可以收到的 
  std:: cout<<"进程"<<getpid()<<"捕获了信号为"<<signo<<" "<<cnt<<std::endl;
//  exit(1);
 // abort();
}

int main()
{
   // for(int sig = 1;sig<31;sig++)
   // {
   //   signal(sig,handler);
   // }
   // 
   // while(1)
   // {
   //   sleep(1);
   //   cout<<'.'<<endl;
   // }

  struct sigaction act, oact;
  // act.sa_handler = handler;
   // act.sa_handler = SIG_IGN;
   // act.sa_handler = SIG_DFL;
    act.sa_handler = SIG_ERR;
   act.sa_flags = 0;
   sigemptyset(&act.sa_mask);
   sigaddset(&act.sa_mask, 3);
   sigaction(2, &act, nullptr);
   while(1)
   {
     sleep(1);
     cout<<'.'<<endl;
   }
//   //浮点数错误，8号
//  //signal(8,handler);
// // int a=10 ;
// // a = a/0;
// // signal(SIGABRT,handler);
//  // alarm(1);
//   while(1)
//   {
//     cnt++;
//     sleep(1);
// //    if(cnt>5)
// //      abort();
//   }

  
  return 0;
}
